﻿using Prism.Commands;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;

namespace PrismDemo.ViewModels
{
    public class DialogTestViewModel : BindableBase, IDialogAware
    {
        //对话窗体的标题
        public string Title => "弹窗测试";
        private string _textValue;
        public string TextValue
        {
            get => _textValue;
            set { SetProperty(ref _textValue, value); }
        }
        //触发这个事件去关闭对话框，
        //这个事件的订阅就是当对话框关闭后的回调函数，由show方法传入后实例化这里不需要指定
        public event Action<IDialogResult> RequestClose;
        //返回true表示可以关闭对话框
        public bool CanCloseDialog() => true;
        //对话框关闭的时候触发，无论是点击关闭按钮还是触发事件
        public void OnDialogClosed()
        {
        }
        //当对话框打开的时候触发这个方法，并且传递对话框参数进来
        public void OnDialogOpened(IDialogParameters parameters)
        {
            //可以在这里接收对话打开时候，父窗口传递给子窗口的值
            //演示子窗口的Text控件的内容由父窗口传递的值设置
            string para = parameters.GetValue<string>("param1");
            this.TextValue = para;
        }
        //之所以定义这两个Command是为了使用事件关闭窗口
        public DelegateCommand ClickYesCommand => new DelegateCommand(ClickYes);
        public DelegateCommand ClickNoCommand => new DelegateCommand(ClickNo);
        private void ClickNo()
        {
            //点击取消按钮的时候关闭对话框,并且传递对话框结果（结果中还可以带参数）
            RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
        }

        private void ClickYes()
        {
            //点击确认按钮的时候关闭对话框,并且传递对话框结果（结果中还可以带参数）
            IDialogParameters parameters = new DialogParameters();
            parameters.Add("param2", "子传父参数");
            RequestClose?.Invoke(new DialogResult(ButtonResult.OK, parameters));
        }
    }
}
